home *** CD-ROM | disk | FTP | other *** search
- // the implementation of class LAYER
- // Copyright (C) 1996 Kazutaka Hirata <khirata@jove.acs.unt.edu>
-
- #include "file.h"
-
- #include "../intstr.h"
-
- #include "layer.h"
-
- enum KIND_ITEM {
- KIND_PIN,
- KIND_LINE,
- KIND_UNKNOWN
- };
-
- static const INTSTR_ELEMENT kind_str_table[] = {
- {KIND_PIN , "pin" },
- {KIND_LINE , "line"},
- {KIND_UNKNOWN, NULL }
- };
-
- void LAYER::operator=(const LAYER& src)
- {
- m_pin_list = src.m_pin_list ;
- m_line_list = src.m_line_list;
- }
-
- void LAYER::clear()
- {
- m_pin_list .clear();
- m_line_list.clear();
- }
-
- XY LAYER::get_max() const
- {
- return ::get_max(m_pin_list.get_max(), m_line_list.get_max());
- }
-
- XY LAYER::get_min() const
- {
- return ::get_min(m_pin_list.get_min(), m_line_list.get_min());
- }
-
- void LAYER::shift(const XY& ac_dif, LAYER& target) const
- {
- m_pin_list .shift(ac_dif, target.m_pin_list );
- m_line_list.shift(ac_dif, target.m_line_list);
- }
-
- void LAYER::unselect()
- {
- m_pin_list .unselect();
- m_line_list.unselect();
- }
-
- void LAYER::select_items_in_block(const XY& ac1, const XY& ac2)
- {
- m_pin_list .select_items_in_block(ac1, ac2);
- m_line_list.select_items_in_block(ac1, ac2);
- }
-
- void LAYER::collect_selected_items(LAYER& dst) const
- {
- m_pin_list .collect_selected_items(dst.m_pin_list );
- m_line_list.collect_selected_items(dst.m_line_list);
- }
-
- void LAYER::remove_selected_items()
- {
- m_pin_list .remove_selected_items();
- m_line_list.remove_selected_items();
- }
-
- void LAYER::operator+=(const LAYER& target)
- {
- m_pin_list .add(target.m_pin_list );
- m_line_list.add(target.m_line_list);
- }
-
- void LAYER::load_200a8(FILE_NEW& fp)
- {
- for(;;) {
- char str[1024];
- fp.gets_wo_return(str, 1024);
- if(!strcmp(str, "end")) {
- break;
- } else {
- INTSTR_TABLE table(kind_str_table, KIND_UNKNOWN);
- KIND_ITEM kind = (KIND_ITEM)table.get_no(str);
- switch(kind) {
- case KIND_PIN : {
- m_pin_list.load(fp);
- break;
- }
- case KIND_LINE : {
- m_line_list.load(fp);
- break;
- }
- default : {
- break;
- }
- }
- }
- }
- }
-
- uint LAYER::load_get_version(FILE_NEW& fp) const
- {
- FILE_VERSION fver;
- char str[1024];
- fp.gets_wo_return(str, 1024);
- return fver.get_version_no(str);
- }
-
- int LAYER::load(FILE_NEW& fp)
- {
- typedef void (LAYER::*LOAD_FUNC)(FILE_NEW& fp);
- LOAD_FUNC load_func;
- int retval;
-
- uint version = load_get_version(fp);
- switch(version) {
- case FILE_VERSION::VERSION_200A8 : {
- load_func = &LAYER::load_200a8;
- break;
- }
- default : {
- load_func = NULL;
- break;
- }
- }
- if(load_func != NULL) {
- (this->*load_func)(fp);
- retval = true;
- } else {
- retval = false;
- }
- return retval;
- }
-
- int LAYER::save(FILE_NEW& fp) const
- {
- FILE_VERSION fver;
- fp.printf("%s\n", fver.get_version_str(FILE_VERSION::VERSION_200A8));
-
- fp.puts("pin\n");
- m_pin_list.save(fp);
-
- fp.puts("line\n");
- m_line_list.save(fp);
-
- fp.puts("end\n");
- return true;
- }
-
- void LAYER::collect_aperture(APT_TABLE& apt_pin_table, APT_TABLE& apt_line_table) const
- {
- m_pin_list .collect_aperture(apt_pin_table );
- m_line_list.collect_aperture(apt_line_table);
- }
-
- bool LAYER::empty() const
- {
- return m_pin_list.empty() && m_line_list.empty();
- }
-
- void LAYER::rotate_90()
- {
- m_pin_list .rotate_90();
- m_line_list.rotate_90();
- }
-
- void LAYER::limit_drill_size(uint drill)
- {
- m_pin_list.limit_drill_size(drill);
- }
-